package interfaceGrafica;


	import java.awt.GridLayout;
	import java.awt.event.ActionEvent;
	import java.awt.event.ActionListener;

	import javax.swing.JButton;
	import javax.swing.JFrame;
	import javax.swing.JMenu;
	import javax.swing.JMenuBar;
	import javax.swing.JMenuItem;
	import javax.swing.JOptionPane;

	public class Jogo extends JFrame implements ActionListener{
			private int numeroJogadas;
			private String vez;
			private String jogadorInicio;
			private int valorCelula;
			private int[][] matrizJogo;
			private String jogador1;
			private int vitorias1;
			private String jogador2;
			private int vitorias2;
			private JButton btnTopoEsqueda,
							btnTopoCentro,
							btnTopoDireita,
							btnCentroEsquerda,
							btnCentroCentro,
							btnCentroDireita,
							btnBaixoEsquerda,
							btnBaixoCentro,
							btnBaixoDireita;
			private JMenuBar barra;
			private JMenu menu;
			private JMenuItem novoJogo, verRanking;
			private String jogadorVencedor;
			
			
			public void setVez(){
				if(jogadorInicio==jogador2){
					
					jogadorInicio=jogador1;
				}
				else{
					
					jogadorInicio=jogador2;
				}
			}
			
			public Jogo(){
				
				super("Jogo");
				this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
				this.numeroJogadas = 0;
				vez = "X";
				vitorias1=0;
				vitorias2=0;
				matrizJogo = new int[3][3];
				this.setLayout(new GridLayout(3,3));
				barra = new JMenuBar();
				
				menu = new JMenu("Iniciar");
				barra.add(menu);
				
				novoJogo = new JMenuItem("Novo Jogo");
				novoJogo.addActionListener(this);
				verRanking = new JMenuItem("Pontuacao");
				verRanking.addActionListener(this);
				
				this.setJMenuBar(barra);
				menu.add(novoJogo);
				menu.add(verRanking);
				
				
				btnTopoEsqueda = new JButton("");
				btnTopoCentro = new JButton("");
				btnTopoDireita = new JButton("");
				btnCentroEsquerda= new JButton("");
				btnCentroCentro= new JButton("");
				btnCentroDireita= new JButton("");
				btnBaixoEsquerda= new JButton("");
				btnBaixoCentro= new JButton("");
				btnBaixoDireita= new JButton("");
				
				
				this.add(btnTopoEsqueda);
				this.add(btnTopoCentro);
				this.add(btnTopoDireita);
				
				this.add(btnCentroEsquerda);
				this.add(btnCentroCentro);
				this.add(btnCentroDireita);
				
				this.add(btnBaixoEsquerda);
				this.add(btnBaixoCentro);
				this.add(btnBaixoDireita);
				
				
				
				
				
				btnTopoEsqueda.addActionListener(this);
				btnTopoCentro.addActionListener(this);
				btnTopoDireita.addActionListener(this);
				btnCentroEsquerda.addActionListener(this);
				btnCentroCentro.addActionListener(this);
				btnCentroDireita.addActionListener(this);
				btnBaixoEsquerda.addActionListener(this);
				btnBaixoCentro.addActionListener(this);
				btnBaixoDireita.addActionListener(this);
			
				
		
				this.bloquearJogo();
				this.setSize(155,183);
				this.setResizable(false);
				setVisible(true);
				this.setLocationRelativeTo(null);
				
			}
			
			
			
			public static void main(String args[]){
				new Jogo();
			}
			
			
			public void setValorCelula(){
				if(vez.equals("X")){
					valorCelula = 1;
				}
				else{
					valorCelula = 2;
				}
			}
			
			public void bloquearJogo(){
				btnTopoEsqueda.setEnabled(false);
				btnTopoCentro.setEnabled(false);
				btnTopoDireita.setEnabled(false);
				btnCentroEsquerda.setEnabled(false);
				btnCentroCentro.setEnabled(false);
				btnCentroDireita.setEnabled(false);
				btnBaixoEsquerda.setEnabled(false);
				btnBaixoCentro.setEnabled(false);
				btnBaixoDireita.setEnabled(false);
			}

			@Override
			public void actionPerformed(ActionEvent e) {
				if(e.getSource()==btnTopoEsqueda){
					btnTopoEsqueda.setEnabled(false);
					numeroJogadas++;
					btnTopoEsqueda.setText(vez);
					mudaVez();
					matrizJogo[0][0] = valorCelula;
					verificaVencedor(valorCelula);
					
				}
				if(e.getSource()==btnTopoCentro){
					btnTopoCentro.setEnabled(false);
					numeroJogadas++;
					btnTopoCentro.setText(vez);
					mudaVez();
					matrizJogo[0][1] = valorCelula;
					verificaVencedor(valorCelula);
					
				}
				if(e.getSource()==btnTopoDireita){
					btnTopoDireita.setEnabled(false);
					numeroJogadas++;
					btnTopoDireita.setText(vez);
					mudaVez();
					matrizJogo[0][2] = valorCelula;
					verificaVencedor(valorCelula);
					
				}
				
				
				
				if(e.getSource()==btnCentroEsquerda){
					btnCentroEsquerda.setEnabled(false);
					numeroJogadas++;
					
					btnCentroEsquerda.setText(vez);
					mudaVez();
					matrizJogo[1][0] = valorCelula;
					verificaVencedor(valorCelula);
					
					
				}
				if(e.getSource()==btnCentroDireita){
					btnCentroDireita.setEnabled(false);
					numeroJogadas++;
					
					btnCentroDireita.setText(vez);
					mudaVez();
					matrizJogo[1][2] = valorCelula;
					verificaVencedor(valorCelula);
					
					
				}
				if(e.getSource()==btnCentroCentro){
					btnCentroCentro.setEnabled(false);
					numeroJogadas++;
					
					btnCentroCentro.setText(vez);
					mudaVez();
					matrizJogo[1][1] = valorCelula;
					verificaVencedor(valorCelula);
					
					
				}
				
				
				
				if(e.getSource()==btnBaixoEsquerda){
					btnBaixoEsquerda.setEnabled(false);
					numeroJogadas++;
					
					btnBaixoEsquerda.setText(vez);
					mudaVez();
					matrizJogo[2][0] = valorCelula;
					verificaVencedor(valorCelula);
					
				}
				if(e.getSource()==btnBaixoDireita){
					numeroJogadas++;
					btnBaixoDireita.setEnabled(false);
					btnBaixoDireita.setText(vez);
					mudaVez();
					matrizJogo[2][2] = valorCelula;
					verificaVencedor(valorCelula);
					
				}
				if(e.getSource()==btnBaixoCentro){
					numeroJogadas++;
					btnBaixoCentro.setEnabled(false);
					btnBaixoCentro.setText(vez);
					mudaVez();
					matrizJogo[2][1] = valorCelula;
					verificaVencedor(valorCelula);
					
				}
				
				if(e.getSource()==novoJogo){
					jogador1 = JOptionPane.showInputDialog(this, "Jogador 'X': ");
					jogador2 = JOptionPane.showInputDialog(this, "Jogador 'O': ");
					jogadorInicio = jogador2;
					this.novoJogo();
				}
				if(e.getSource()==verRanking){
					JOptionPane.showMessageDialog(this, jogador1 + ": "+ vitorias1+"\r\n"+jogador2 + ": "+ vitorias2);
				}
			
			}
			
			
			
			public void novoJogo(){
				this.setVez();
				JOptionPane.showMessageDialog(this, "Atencao! o jogador '"+ vez + "' deve comecar");
				numeroJogadas=0;
				matrizJogo = new int[3][3];
				btnTopoEsqueda.setEnabled(true);
				btnTopoEsqueda.setText("");
				btnTopoCentro.setEnabled(true);
				btnTopoCentro.setText("");
				btnTopoDireita.setEnabled(true);
				btnTopoDireita.setText("");
				btnCentroEsquerda.setEnabled(true);
				btnCentroEsquerda.setText("");
				btnCentroCentro.setEnabled(true);
				btnCentroCentro.setText("");
				btnCentroDireita.setEnabled(true);
				btnCentroDireita.setText("");
				btnBaixoEsquerda.setEnabled(true);
				btnBaixoEsquerda.setText("");
				btnBaixoCentro.setEnabled(true);
				btnBaixoCentro.setText("");
				btnBaixoDireita.setEnabled(true);
				btnBaixoDireita.setText("");
			}
			
			public void finalizarJogo(){
				btnTopoEsqueda.setEnabled(false);
				btnTopoCentro.setEnabled(false);
				btnTopoDireita.setEnabled(false);
				btnCentroEsquerda.setEnabled(false);
				btnCentroCentro.setEnabled(false);
				btnCentroDireita.setEnabled(false);
				btnBaixoEsquerda.setEnabled(false);
				btnBaixoCentro.setEnabled(false);
				btnBaixoDireita.setEnabled(false);
				JOptionPane.showMessageDialog(this, "Vencedor: "+ jogadorVencedor+ "!");
				this.novoJogo();
				
				
			}
			
			public void especificaVencedor(int jogador){
				
				if(jogador==1){
					jogadorVencedor = jogador1;
					this.vitorias1++;
				}
				else{
					jogadorVencedor = jogador2;
					this.vitorias2++;
				}
			}
			
			public void verificaVencedor(int jogador){
				int sequencia = 0;
				boolean continua = true;
			
				for(int i=0; i<3;i++){
					
				
					for(int j=0; j<3; j++){
						if(matrizJogo[i][j]==jogador){
							sequencia++;
							
						}
						
					}
					if(sequencia==3){
						sequencia = 0;
						especificaVencedor(jogador);
						finalizarJogo();
						
						continua = false;
					
					}
					sequencia = 0;
				}
				
				
				if(continua){
					for(int j=0; j<3; j++){
						for(int i=0; i<3; i++){
							if(matrizJogo[i][j]==jogador){
								sequencia++;
							}
						}
						if(sequencia==3){
							sequencia = 0;
							especificaVencedor(jogador);
							finalizarJogo();
							continua = false;
						
							
							
						}
						sequencia=0;
					}
				}
			if(continua){	
				for(int i=0; i<3; i++){
					
						if(matrizJogo[i][i]==jogador){
							sequencia++;
						}
						if(sequencia==3){
							continua = false;
							sequencia = 0;
							especificaVencedor(jogador);
							this.finalizarJogo();
							
						}
						
				}
			}
			if(continua){
				if(matrizJogo[0][2]==jogador){
					if(matrizJogo[1][1]==jogador){
						if(matrizJogo[2][0]==jogador){
							continua = false;
							sequencia = 0;
							especificaVencedor(jogador);
							this.finalizarJogo();
						}
					}
					
				}
			}
			
			if(continua){
				if(numeroJogadas==9){
					JOptionPane.showMessageDialog(this, "Jogo Empatado!");
					this.novoJogo();
				}
			}
				
			
				
				
				
			}
			
			public void mudaVez(){
				if(vez.equals("X")){
					vez = "O";
					valorCelula = 1;
				}
				else{
					vez = "X";
					valorCelula = 2;
				}
			}
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
	}

